Computer technology continues to advance at a rapid pace, with significant developments being made in both software and in the underlying hardware upon which the software executes. One significant advance in computer technology is the development of multi-processor computers, where multiple computer processors are interfaced with one another to permit multiple operations to be performed concurrently, thus improving the overall performance of such computers. Also, a number of multi-processor computer designs rely on logical partitioning to allocate computer resources to further enhance the performance of multiple concurrent operating systems.
With logical partitioning, a single physical computer is permitted to operate essentially like multiple and independent virtual computers (referred to as logical partitions), with the various resources in the physical computer (e.g., processors, memory, data structures, and input/output devices) allocated among the various logical partitions. Each logical partition may execute a separate operating system, and from the perspective of users and of the software applications executing on the logical partition, operates as a fully independent computer.
Logical partitions may desire to communicate with each other via messages. A logical partition may communicate not only to another logical partition operating on the same computer, but also to another logical partition operating on a different computer connected via a network. In order to send and receive messages across a network, a logical partition makes use of an adapter, which allows a connection to the network via a channel or channels.
In order to manage the adapter and its channels, a logical partition uses data structures, which represent the adapter and its channels and contain configuration and status information. Before the advent of logically-partitioned computers, managing the data structures associated with the adapter was relatively straightforward because the computer only had one operating system accessing the data structures, and the number of adapters was small. But now, an environment in which many logical partitions with many operating systems accessing many adapters can exist on a single computer. Further, logical partitions may be created and destroyed, and adapters may be installed and uninstalled, which causes additional complexity in managing the data structures.
Despite this additional complexity, today's logically-partitioned computers still use the same technique for managing data structures that the old single-operating system computers used: a large global array holds all the data for the channels for a given adapter, and this global array is accessible by all related management code regardless of the partition that is accessing a given channel. A large global array increases the complexity of code development and maintenance for support of multiple logical partitions, thus adversely affecting the reliability of the desired code. Also, this global array requires a large amount of dedicated memory, which is expensive.
Without a better way of allocating data structures for network adapters, logically-partitioned systems will continue to suffer from the high cost of large amounts of memory. Although the aforementioned problems have been discussed in the context of a network adapter, they may occur with any type of adapter.